<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>

    /* 
    区别Map与WeakMap
    1. Map的key是任意类型, WeakMap的key是对象类型
    2. 当key为对象时, 
      map中保存的key对象是强引用 => 即使外部对key对象的引用断开, key对象不被回收
      weakMap中保存的key对象是弱引用 => 一旦key对象没有外部引用时, key对象会自动被回收
    */
   let obj1 = {m: 1}
   let obj2 = {m: 2}
    const map = new Map() // 对key对象是一个强引用 => 如果key对象没有外部引用, key依然不会被回收
    map.set('name', 'abc')
    map.set(obj1, 123)
    

    const weakMap = new WeakMap() // 对key对象是一个弱引用 => 如果key对象没有外部引用, key对象就会被自动回收
    weakMap.set(obj2, 'abc2')

    obj1 = null
    obj2 = null

    console.log(map)
    console.log(weakMap)

  </script>
</body>
</html>